package cc.yaomm.common.basic.file.properties;

import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.unit.DataSize;

/**
 * Created by XQL on 2020/5/18.
 */
@Data
@ToString
@ConfigurationProperties(prefix = FileProperties.FILE_PREFIX)
public class FileProperties {

    public static final String FILE_PREFIX = "file";

    /**
     * 文件存储基础路径（本地文件存储时生效）
     */
    private String basePath;

    /**
     * 图片
     */
    private ImageFileProperties image = new ImageFileProperties();

    /**
     * 视频
     */
    private VideoFileProperties video = new VideoFileProperties();

    /**
     * 其他
     */
    private OtherFileProperties other = new OtherFileProperties();

    @Data
    @ToString
    public class ImageFileProperties {

        /**
         * 图片大小限制
         * 参考值：10MB
         */
        private DataSize size;

        /**
         * 图片格式限制
         * 参考值：.jpg.jpeg.gif.png.bmp.svg
         */
        private String format;

        /**
         * 图片压缩属性
         */
        private ImageFileCompressProperties compress = new ImageFileCompressProperties();

        @Data
        @ToString
        public class ImageFileCompressProperties {

            /**
             * 是否启用图片压缩
             * 默认值：false
             */
            private boolean enable = false;

            /**
             * 图片压缩大小阈值
             * 参考值：2MB
             */
            private DataSize size;

            /**
             * 缩放比例，1为原大小
             * 默认值：0.8f
             */
            private float scale = 0.8f;

            /**
             * 图片质量，范围（0-1），最大质量越高
             * 默认值：0.8f
             */
            private float quality = 0.8f;

        }
    }

    @Data
    @ToString
    public class VideoFileProperties {

        /**
         * 视频大小限制
         * 参考值：100MB
         */
        private DataSize size;

        /**
         * 视频格式限制
         * 参考值：.flv.swf.mkv.avi.rm.rmvb.mpeg.mpg.ogg.ogv.mov.wmv.mp4.webm.mp3.wav.mid.f4v.3gp.ram.cda.wma.flac.ape
         */
        private String format;
    }

    @Data
    @ToString
    public class OtherFileProperties {

        /**
         * 其他文件大小限制
         * 参考值：10MB
         */
        private DataSize size;

        /**
         * 其他文件格式限制
         * 参考值：.doc.docx.xls.xlsx.ppt.pptx.pdf.txt.md.xml.rar.zip.tar.gz.7z.bz2
         */
        private String format;
    }
}
